home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
CRS
/
crs03.d81
/
datafile.sfx
/
datafile
(
.txt
)
next >
Wrap
Commodore BASIC
|
1990-02-12
|
8KB
|
266 lines
10 REM DATAFILE 2.9 BY MIKE KONSHAK
12 POKE53280,13:POKE53281,11:PRINT"[158]":GOSUB16:IFX=0THENGOTO66
14 GOTO68
16 D$=CHR$(0):MR$=D$:DR$=D$:S=0:B1$=D$:PW=0:CW=0:B$=CHR$(32)
18 NC=0:NL=0:PG=0:F1=0:F2=0:F3=0:L$=D$:RL=0:SB$=D$:CR$=CHR$(13):HN$=D$:ID$=D$
20 A$=D$:C$=D$:T%=0:I$=D$:CK=0:I=0:J=0:K=0:L=0:M=0:N=0:RW=5:SF=0:Z=0:E$="EOF"
22 EN=0:EM$=D$:ET=0:ES=0:A1$=D$:A2$=D$:A3$=D$:S1$=D$:FL=0
23 MEM=30000:RETURN
24 DIMF$(F+1),T%(F+1),L%(F+1):RETURN
26 DIMREC$(R+1,F+1),ML$(9,4),PC(10),TT$(5),HC$(9),K%(R+1):RETURN
28 REM--GET
30 GETA$:IFA$=""THEN30
32 RETURN
34 REM--CREATE
36 IFCK<>0THENGOSUB394
38 PRINT"[147] INITIALIZE DATAFILE "
40 CLR:GOSUB16:INPUT"HOW MANY FIELDS IN EACH RECORD? 0 [157][157][157][157]";F:IFF=0THEN68
42 GOSUB24:FORI=1TOF
44 PRINT"FIELD #";I:PRINT"TITLE ? > "
46 PRINT"LENGTH? 0 "
47 PRINT"";TAB(6);:INPUTF$(I):IFF$(I)=""THENF$(I)=">"
48 PRINTTAB(6);:INPUTL%(I):IFL%(I)=0THEN68
49 NEXTI
50 REM--COMPUTE # RECORDS
52 FORJ=0TOF:RL=RL+L%(J):NEXTJ:RL=RL+3*(F+1)+5:R=INT((MEM-12*(F+1)-2100)/RL)
54 PRINT" YOUR SELECTIONS WILL ALLOW APPROX"
56 PRINTR;"RECORDS. A[146]CCEPT OR R[146]EJECT?"
58 GOSUB30:IFA$="R"THEN38
59 IFA$="A"THENGOSUB26:CK=1
60 FORI=1TOF:IFLEN(F$(I))>S1THENS1=LEN(F$(I))
62 NEXTI:GOTO68
64 REM MENU
66 PRINT"[147] DATAFILE 2.9 BY MIKE KONSHAK ":GOTO70
68 PRINT"[147] DATAFILE MENU "
70 PRINT" C[146]REATE NEW FILE Q[146]UIT PROGRAM
72 [153]" AWAITDD RECORD TO CURRENT FILE"
74 [153]" MWAITODIFY RECORD IN CURRENT FILE"
76 [153]" DWAITELETE RECORD IN CURRENT FILE"
78 [153]" VWAITIEW FILE ON SCREEN
80 PRINT" S[146]ORT RECORDS BY FIELD
82 [153]" PWAITRINT RECORDS BY SELECTION
84 PRINT" R[146]EAD OLD FILE FROM DISK"
86 PRINT" W[146]RITE NEW FILE TO DISK
88 [153]" @WAIT DISK DRIVE COMMANDS
90 PRINT" PRESS THE APPROPRIATE KEY "
92 PRINT" THERE ARE";X;"RECORDS IN MEMORY"
94 IFR>0THENPRINT" SPACE FOR";R-X;"MORE RECORDS[145]"
96 GOSUB30:IFA$="A"THENGOSUB350:IFFL=0THEN124
98 IFA$="M"THENGOSUB354:IFFL=0THEN244
100 IFA$="D"THENGOSUB354:IFFL=0THEN272
102 IFA$="C"THEN36
104 IFA$="R"THEN170
106 IFA$="P"THENGOSUB354:IFFL=0THEN358
108 IFA$="V"THENGOSUB354:IFFL=0THEN192
110 IFA$="W"THENGOSUB350:IFFL=0THEN144
112 IFA$="S"THENGOSUB354:IFFL=0THEN304
114 IFA$="Q"THEN342
116 IFA$="@"THEN462
118 IFFL<>0THENFL=0:GOTO68
120 GOTO96
122 REM--ADD RECORDS
124 FORI=X+1TOR:PRINT"[147] PRESS THE RETURN[146] KEY AFTER EACH ENTRY"
126 PRINT" PRESS RETURN[146] WITHOUT ANY ENTRY TO STOP"
128 PRINT" RECORD NUMBER ";I;""
130 FORN=1TOF
132 PRINTF$(N);" >[157][157][157]";:INPUTREC$(I,N):IFREC$(I,N)=""THENREC$(I,N)=">"
134 IFLEN(REC$(I,N))>L%(N)THENGOSUB140:GOTO132
136 IFREC$(I,1)=">"THENX=I-1:CK=1:GOTO68
138 NEXTN:K%(I)=I:NEXTI:X=R:CK=1:GOTO68
140 PRINT"CANNOT EXCEED";L%(N);" CHARACTERS":RETURN
142 REM SAVE
144 PRINT"[147]ENTER NAME OF CURRENT FILE TO BE SAVED"
146 PRINT"(12 CHARACTERS MAX). ANY AXISTING FILE"
148 PRINT"WITH THE SAME NAME WILL BE SCRATCHED."
150 PRINT" ";NF$:INPUT"[145]";NF$:IFNF$=""THEN68
152 OPEN15,8,15:PRINT#15,"S0:DF] "+LEFT$(NF$,8)+"!OLD":GOSUB414:IFET=8THEN68
154 PRINT#15,"R0:DF] "+LEFT$(NF$,8)+"!OLD=DF] "+NF$:GOSUB414:IFET=8THEN68
156 OPEN5,8,5,"0:DF] "+NF$+",S,W":GOSUB414:IFET=8THEN68
158 PRINT#5,R;CR$;F;CR$;X:FORN=1TOF:PRINT#5,F$(N);CR$;L%(N):NEXTN
159 GOSUB414:IFET=8THEN68
160 FORI=1TOX:PRINT"SAVING RECORD #";I;"[145][145]"
162 FORN=1TOF:PRINT#5,REC$(K%(I),N):NEXTN:NEXTI:PRINT:GOSUB414:IFET=8THEN68
164 FORI=1TOX:PRINT" SAVING POINTERS";I;"[145][145]":PRINT#5,I:NEXTI
165 PRINT#5,E$:GOSUB414:IFET=8THEN68
166 CLOSE5:CLOSE15:CK=0:GOTO68
168 REM LOAD
170 IFCK<>0THENGOSUB394
172 CLR:GOSUB16:PRINT"[147] ENTER NAME OF FILE TO BE LOADED":INPUTNF$
173 IFNF$=""THEN68
174 OPEN15,8,15:OPEN5,8,5,"0:DF] "+NF$+",S,R":GOSUB414:IFET=8THEN68
175 IFEN=62THENGOSUB416:GOTO68
176 INPUT#5,R,F,X:GOSUB414:IFET=8THEN68
177 GOSUB24:GOSUB26:FORN=1TOF:INPUT#5,F$(N),L%(N):NEXTN:GOSUB414:IFET=8THEN68
178 FORI=1TOX:PRINT"READING RECORD #";I;"[145][145]"
180 FORN=1TOF:INPUT#5,REC$(I,N):NEXTN:NEXTI:PRINT:GOSUB414:IFET=8THEN68
182 FORI=1TOX:PRINT"READING POINTERS";I;"[145][145]":INPUT#5,K%(I):NEXTI
184 S=ST:IFS<>0THEN188
186 INPUT#5,E$:GOSUB414:IFET=8THEN68
188 CLOSE5:CLOSE15:GOTO60
190 REM VIEW
192 I=1
194 IFI=0THEN68
196 IFI>XTHEN68
198 PRINT"[147] RECORD NUMBER:"+STR$(I)+" FILE:"+NF$+""
200 FORN=1TOF:PRINTF$(N);": ";REC$(K%(I),N):NEXTN
202 PRINT" N[146]EXT, L[146]AST, J[146]UMP, F[146]IND, E[146]XIT TO MENU"
204 GOSUB30:IFA$="N"THENI=I+1:GOTO194
206 IFA$="L"THENI=I-1:GOTO194
208 IFA$="J"THEN216
210 IFA$="F"THEN218
212 IFA$="E"THEN68
214 GOTO204
216 INPUT"JUMP TO RECORD NUMBER";I:GOTO194
218 PRINT"[147] FIND RECORDS WITH COMMON ITEMS "
220 FORN=1TOF:PRINT" ";N;"[146] ";F$(N):NEXTN
222 INPUT"WHICH FIELD IS TO BE SEARCHED? 0 [157][157][157][157]";SF:IFSF=0THEN68
224 IFSF<1ORSF>FTHENPRINT"[145][145][145]":GOTO222
226 PRINT"ENTER COMMON ITEM[146] ":PRINT"(THE ENTIRE STRING IS NOT REQUIRED)"
228 PRINT"";F$(SF);"[146] ";:INPUTT$
230 FORI=1TOX:PRINT"SEARCHING RECORD";I;"[145][145]"
232 IFT$=LEFT$(REC$(K%(I),SF),LEN(T$))THEN236
234 GOTO240
236 PRINT"[147] RECORD #";I;"":FORN=1TOF:PRINTF$(N);": ";REC$(K%(I),N):NEXTN
238 PRINT" N[146]EXT RECORD":GOSUB30
240 NEXTI:GOTO68
242 REM MODIFY
244 PRINT"[147] MODIFY WHICH RECORD? ENTER #[146] OR A[146]LL":INPUTMR$:IFMR$=D$THEN68
246 IFMR$="A"THENMR$=D$:GOTO254
248 I=VAL(MR$):MR$=D$
250 IFI>XTHENGOSUB348:GOTO244
252 GOSUB256:GOTO68
254 FORI=1TOX:GOSUB256:NEXTI:GOTO68
256 PRINT"[147]TO MODIFY RECORD NUMBER";I;", MAKE CHANGES"
258 PRINT"AS EACH FIELD IS DISPLAYED, THEN RETURN[146]"
260 FORN=1TOF:PRINTF$(N)":":PRINT" ";REC$(K%(I),N)
261 IFLEN(REC$(K%(I),N))>36THENPRINT"[145]";
262 PRINT"[145] ";:INPUTREC$(K%(I),N)
264 IFLEN(REC$(K%(I),N))>L%(N)THENGOSUB140:GOTO260
266 IFREC$(K%(I),N)=""THENREC$(K%(I),N)=">"
268 NEXTN:CK=1:RETURN
270 REM DELETE
272 PRINT"[147] DELETE WHICH RECORD? ENTER #[146] OR A[146]LL"
274 INPUTDR$:IFDR$=D$THEN68
276 IFDR$="A"THENDR$=D$:GOTO282
278 I=VAL(DR$):DR$=D$:IFI>XTHENGOSUB348:GOTO274
280 GOSUB284:GOTO68
282 FORI=1TOX:GOSUB284:NEXTI:GOTO68
284 PRINT"[147] TO DELETE RECORD NUMBER";I;", PRESS"
286 PRINT" SHIFT[146] D[146], PRESS SPACE BAR[146] TO ADVANCE"
288 FORN=1TOF:PRINTF$(N);" ";REC$(K%(I),N):NEXTN
290 GOSUB30:IFA$="[196]"THEN294:REM SHIFTED D
292 CK=1:RETURN
294 PRINT"DELETING RECORD";I:PRINT"RECORDS MAY NOW BE OUT OF ORDER"
296 FORN=1TOF:REC$(K%(I),N)=REC$(X,N):REC$(X,N)="":NEXTN
298 FORJ=1TOX:IFK%(J)=XTHENK%(J)=K%(X):K%(X)=0:X=X-1:GOTO292
300 NEXTJ
302 REM SORT
304 PRINT"[147] SORT RECORDS IN ASCENDING ORDER "
306 FORN=1TOF:PRINT" ";N;"[146] ";F$(N):NEXTN
308 INPUT"WHICH FIELD IS TO BE SORTED? 0 [157][157][157][157]";SF:IFSF=0THEN68
310 IFSF>FTHENPRINT"[145][145][145]":GOTO308
312 PRINT" PLEASE WAIT[146]":M=X
314 M=INT(M/2):IFM=0THENCK=1:GOTO68
316 J=1:K=X-M
318 I=J
320 L=I+M
322 PRINT"SORTING [157][157][157][157][157]";I;"[145]"
324 IFREC$(K%(I),SF)<=REC$(K%(L),SF)THEN328
326 T%(N)=K%(I):K%(I)=K%(L):K%(L)=T%(N):I=I-M:IFI>0THEN320
328 J=J+1:IFJ>KTHEN314
330 GOTO318
332 REM QUIT
334 PRINT"[147] [150]YOU HAVE NOT SAVED YOUR CHANGES![158]"
336 PRINT" DOYOU REALLY WANT TO QUIT? Y[146] OR N[146]
338 [141]30:[139]A$[178]"Y"[167]344
340 [137]68
342 [139]CK[179][177]0[167]334
344 [153]"LOADDATAFILE TERMINATED":[128]
346 [143] ERROR CHECK
348 [153]" DEFNO SUCH RECORD EXISTSSYS":[142]
350 [139]R[177]0[167][142]
352 [153]" DEF NO RECORDS OR FILES IN MEMORY SYSWAIT "
353 [129]I[178]1[164]500:[130]I:FL[178]1:[142]
354 [139]X[177]0[167][142]
355 [141]352:[142]
356 [143] LOAD PRINT
358 [153]"LOAD PRINTER MAIN MENU "
360 [153]" PRINT RECORDS USING:
362 PRINT" R[146]EPORTS AND LISTS
364 [153]" MWAITAILING LABELS
366 PRINT" U[146]SER DEFINED SUBPROGRAM
368 [153]" EWAITXIT TO MAIN MENU
370 PRINT" PRESS THE APPROPRIATE KEY "
372 GOSUB30:IFA$="R"THEN384
374 IFA$="E"THEN68
376 IFA$="U"THEN386
378 IFA$="M"THEN382
380 GOTO372
382 PRINT"[147] LOADING MAILING LABEL SUBPROGRAM":LOAD"DFMAIL",8
384 PRINT"[147] LOADING REPORT/LISTING SUBPROGRAM":LOAD"DFREPORT",8
385 REM ?"[147] LOADING CALCULATIONS SUBPROGRAM":LOAD"DFCALC",8
386 PRINT"[147] ENTER NAME OF SUBPROGRAM"
388 PRINT"";SB$:INPUT"[145]";SB$:IFSB$=D$THEN358
389 OPEN15,8,15:OPEN5,8,5,"0:"+SB$+",P,R":GOSUB414:IFEN=62THENGOSUB416:GOTO358
390 CLOSE5:CLOSE15:LOADSB$,8
392 REM WARNING
394 PRINT"[147] [150]THIS WILL DESTROY THE FILE IN MEMORY![158]"
396 PRINT" SAVE THE FILE FIRST? Y[146] OR N[146]":GOSUB30:IFA$="N"THENRETURN
398 GOTO68
400 REM NEW DISK
402 PRINT"[147] THIS WILL ERASE THE DISK![158]"
403 PRINT" ARE YOU SURE? Y[146] OR N[146]
404 [141]30:[139]A$[178]"N"[167]68
406 [139]A$[179][177]"Y"[167]68
408 [133]" DISK NAME,IDWAIT";HN$,ID$:[139]HN$[178]D$[167]68
410 [159]15,8,15:[152]15,"NEW0:"[170]HN$[170]","[170]ID$:[141]414:[139]ET[178]8[167]462
411 [160]15:[137]462
412 [143] DISK ERROR
414 [132]15,EN,EM$,ET,ES:[139](EN[179]20)[176](EN[178]62)[167]ET[178]0:[142]
416 [153]" DEFDISK ERRORWAIT"EN"CMD, "EM$","ET"CMD,"ES"SYS":ET[178]8
418 [153]" PRESS ANY KEYWAIT TO RETURN TO MENU":[141]30:[160]5:[160]15:[142]
420 [143] DIRECTORY
422 [159]15,8,15:[159]5,8,0,"$0":[153]"LOAD":[141]414:[139]ET[178]8[167]462
424 [161]#5,A1$,A2$
426 [161]#5,A1$,A2$
428 [161]#5,A1$,A2$
430 [139]A1$[179][177]""[167]A0[178][198](A1$)
432 [139]A2$[179][177]""[167]A0[178]A0[170][198](A2$)[172]256
434 [153][202]([196](A0),2);[163]3);
436 [161]#5,A2$:[139]ST[179][177]0[167]454
438 [139]A2$[179][177][199](34)[167]436
440 [161]#5,A2$:[139]A2$[179][177][199](34)[167][153]""A2$"WAIT";:[137]440
442 [161]#5,A2$:[139]A2$[178][199](32)[167]442
444 [153][163]20);:A3$[178]""
446 A3$[178]A3$[170]A2$:[161]#5,A2$:[139]A2$[179][177]""[167]446
448 [153][200](A3$,3)
450 [161]A$:[139]A$[179][177]""[167][141]458
452 [139]ST[178]0[167]426
454 [153]" BLOCKS FREE";:A0[178]0
456 [160]5:[160]15:[153][163]25)"PRESS ANY KEYWAIT":[141]30:[137]462
458 [141]30:[142]
460 [143] DISK COMMANDS
462 [153]"LOAD DISK COMMANDS MENU "
464 [153]" $WAIT DISK DIRECTORY
466 PRINT" F[146]ORMAT A BLANK DISK
468 [153]" SWAITCRATCH A SEQ FILE
470 PRINT" R[146]ENAME A SEQ FILE
472 [153]" EWAITXIT TO MAIN MENU
474 PRINT" PRESS THE APPROPRIATE KEY "
476 GOSUB30:MR$=D$:DR$=D$:IFA$="$"THEN422
478 IFA$="F"THEN402
480 IFA$="S"THENGOSUB498:GOTO488
482 IFA$="E"THEN68
484 IFA$="R"THENGOSUB498:GOTO493
486 GOTO476
488 INPUT" SCRATCH FILE NAME [146]";DR$:IFDR$=D$THEN462
490 OPEN15,8,15:OPEN5,8,5,"0:"+DR$+",S,R":GOSUB414:IFET=8THEN462
492 CLOSE5:PRINT#15,"S0:"+DR$+:CLOSE15:GOTO462
493 INPUT" RENAME OLD FILE[146]";DR$:IFDR$=D$THEN462
494 INPUT" TO NEW FILE [146]";MR$:IFMR$=D$THEN462
495 OPEN15,8,15:OPEN5,8,5,"0:"+DR$+",S,R":GOSUB414:IFET=8THEN462
496 CLOSE5:PRINT#15,"R0:"+MR$+"="+DR$:OPEN5,8,5:GOSUB414:IFET=8THEN462
497 CLOSE5:CLOSE15:GOTO462
498 PRINT"[147] ENTER FILE NAMES EXACTLY AS SHOWN"
499 PRINT" ON THE DIRECTORY":RETURN